package cn.agiledata.bank.linkbank.logic.payment;

import java.math.BigDecimal;
import java.util.Date;
import java.util.Map;

import cn.agiledata.bank.linkbank.exception.LinkBankException;

/**
 * 银行支付响应接口
 * 
 * @author maxianbo
 * 
 */
public interface BankPayResponse {

	/**
     * 
     * @return 复制的BankPayResponse
     */
	public BankPayResponse copy();

	/**
     * 
     * @return 订单金额
     */
    public BigDecimal getAmount();

	/**
     * 
     * @return 订单时间
     */
    public Date getDate();
    
    /**
     * 
     * @return 订单号
     */
    public String getOrderId();

    /**
     * 
     * @return 订单响应方式
     */
    public int getResponseMode();

    /**
     * 
     * @return 银行返回码
     */
    public String getReturnCode();

    /**
     * 
     * @return 银行返回错误信息
     */
    public String getReturnMessage();

    /**
     * 判断是否需要验证网上银行返回的实际金额与订单金额的一致性
     * 
     * @return true if 需要验证网上银行返回的实际金额与订单金额的一致性, otherwise false
     */
    public boolean isAmountValidatable();

    /**
     * 
     * @return 支付是否成功
     */
	public boolean isSuccessful();

    /**
     * 设置银行返回信息
     * 
     * @param messages
     *            所有的银行返回信息
	 * @throws LinkBankException 如果设置时出现错误
     */
	public void setMessages(Map messages) throws LinkBankException;

}